Red Hat System Administration II 8.2

Управление временными файлами

Задачи

После завершения этого раздела вы сможете включить и отключить таймеры systemd, а также настроить таймер, который управляет временными файлами.

Управление временными файлами

Для современной системы требуется большое количество временных файлов и каталогов. Некоторые приложения (и пользователи) хранят временные данные в каталоге /tmp, а другие используют места, относящиеся к выполняемым задачам, например временные каталоги демона и пользователя в /run. В этом контексте «временный» значит, что файловая система, в которой хранятся эти файлы, существует только в оперативной памяти. Если система перезагрузится или будет выключена, все содержимое этого временного хранилища будет потеряно.

Чтобы система работала стабильно, необходимо создавать эти каталоги и файлы, если они не существуют, так как они нужны демонам и сценариям, а также удалять старые файлы, чтобы они не занимали места на диске и не предоставляли неправильных данных.

В Red Hat Enterprise Linux 7 и более поздних версиях есть новая утилита systemd-tmpfiles, которая предоставляет структурированный и настраиваемый метод управления временными каталогами и файлами.

Когда systemd запускает систему, одним из первых запускается юнит службы systemd-tmpfiles-setup. Эта служба выполняет команду systemd-tmpfiles --create --remove, которая читает файлы конфигурации /usr/lib/tmpfiles.d/*.conf, /run/tmpfiles.d/*.conf и /etc/tmpfiles.d/*.conf. Все файлы и каталоги, помеченные для удаления в этих файлах конфигурации, удаляются, а файлы и каталоги, помеченные для создания (или изменения разрешений), создаются с нужными разрешениями.

Очистка временных файлов с помощью таймера systemd

Чтобы диски работающих долго систем не заполнялись устаревшими данными, юнит таймера systemd с именем systemd-tmpfiles-clean.timer регулярно запускает службу systemd-tmpfiles-clean.service, которая выполняет команду systemd-tmpfiles --clean.

В файлах конфигурации юнита таймера systemd есть раздел [Timer], который указывает, как часто должна запускаться служба с таким же именем.

Используйте следующую команду systemctl для просмотра содержимого файла конфигурации юнита systemd-tmpfiles-clean.timer.

[user@host ~]$ systemctl cat systemd-tmpfiles-clean.timer
# /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published
#  by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

В вышеуказанной конфигурации параметр OnBootSec=15min указывает, что юнит службы с именем systemd-tmpfiles-clean.service запускается через 15 минут после загрузки системы. Параметр OnUnitActiveSec=1d указывает, что любой последующий запуск юнита службы systemd-tmpfiles-clean.service будет через 24 часа после последнего запуска.

Вы можете нужным образом изменить параметры в файле конфигурации юнита таймера systemd-tmpfiles-clean.timer. Например, значение 30min для параметра OnUnitActiveSec запускает юнит службы systemd-tmpfiles-clean.service через 30 минут после последней активации этого юнита. В результате systemd-tmpfiles-clean.service запускается каждые 30 минут после вступления изменений в силу.

Изменив файл конфигурации юнита таймера, выполните команду systemctl daemon-reload, чтобы убедиться, что systemd видит изменения. Эта команда перезагружает конфигурацию диспетчера systemd.

[root@host ~]# systemctl daemon-reload

Перезагрузив конфигурацию диспетчера systemd, выполните следующую команду systemctl, чтобы активировать юнит systemd-tmpfiles-clean.timer.

[root@host ~]# systemctl enable --now systemd-tmpfiles-clean.timer

Очистка временных файлов вручную

Команда systemd-tmpfiles --clean обрабатывает те же файлы конфигурации, что и команда systemd-tmpfiles --create, но вместо создания файлов и каталогов она удаляет все файлы, которые не использовались и не изменялись в течение времени, заданного в файле конфигурации.

Формат файлов конфигурации для команды systemd-tmpfiles подробно описан на man-странице tmpfiles.d(5). Основной синтаксис состоит из семи полей: тип, путь, режим, UID, GID, возраст и аргумент. Значение в поле Тип указывает действие, которое должна выполнить команда systemd-tmpfiles. Например, d используется для создания каталога, если он не существует, а Z ― для рекурсивного восстановления контекста SELinux, разрешений и владельцев файлов.

Далее приведены некоторые примеры с пояснениями.

d /run/systemd/seats 0755 root root -

При создании файлов и каталогов будет создан каталог /run/systemd/seats (если он не существует), принадлежащий пользователю root и группе root с разрешениями rwxr-xr-x. Этот каталог не будет очищаться автоматически.

D /home/student 0700 student student 1d

Будет создан каталог /home/student, если он еще не существует. Если каталог уже существует, его содержимое будет удалено. При выполнении команды systemd-tmpfiles --clean будут удалены все файлы, которые не использовались и не изменялись более одного дня.

L /run/fstablink - root root - /etc/fstab

Будет создана символьная ссылка /run/fstablink, указывающая на файл /etc/fstab. Эта строка не должна автоматически удаляться.

Приоритет файлов конфигурации

Файлы конфигурации могут храниться в трех местах:

  • /etc/tmpfiles.d/*.conf

  • /run/tmpfiles.d/*.conf

  • /usr/lib/tmpfiles.d/*.conf

Файлы в каталоге /usr/lib/tmpfiles.d/ предоставляются соответствующими пакетами RPM. Вы не должны изменять эти файлы. Файлы в каталоге /run/tmpfiles.d/ сами по себе являются временными и обычно используются демонами для управления собственными временными файлами среды выполнения. Файлы в каталоге /etc/tmpfiles.d/ используются администраторами для настройки расположений с временными данными и переопределения значений по умолчанию от поставщиков пакетов.

Если имя файла в /run/tmpfiles.d/ совпадает с именем файла в /usr/lib/tmpfiles.d/, используется файл в /run/tmpfiles.d/. Если имя файла в /etc/tmpfiles.d/ совпадает с именем файла в /run/tmpfiles.d/ или /usr/lib/tmpfiles.d/, используется файл в /etc/tmpfiles.d/.

С учетом этих правил вы можете легко переопределить параметры поставщика, скопировав соответствующий файл в каталог /etc/tmpfiles.d/ и изменив его. Таким образом, можно легко управлять параметрами systemd-tmpfiles с помощью системы управления конфигурацией, при этом они не будут перезаписываться при обновлении пакетов.

Примечание

При тестировании новой или измененной конфигурации может быть полезно применять команды только из одного файла конфигурации. Для этого необходимо указать имя файла конфигурации в командной строке в качестве аргумента.

Ссылки

Man-страницы systemd-tmpfiles(8), tmpfiles.d(5), stat(1), stat(2) и systemd.timer(5)